package gestiones;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.LinkedList;
import java.util.List;
import conectores.Conexion;


import clases.Habitante;
import clases.Misiones;
public class GestionHabitante  {
	
	public boolean ingresarHabitante(List<Habitante> habitantes) {
		Conexion conexion = new Conexion();
		Connection con = null;
        CallableStatement cs = null;
        boolean resultado = false;
        Habitante hab= null;
      
        try {
        	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (!habitantes.isEmpty()){
				for (int i=0; i< habitantes.size();i++){
			hab= new Habitante();
			hab= habitantes.get(i);
			String query = "{? = call censo_comunal.insertar_habitante(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
			cs = con.prepareCall(query);
			cs.registerOutParameter(1, Types.BOOLEAN);
			cs.setString(2,hab.getNombreHab());
			cs.setString(3,hab.getApellidoHab());
			cs.setString(4,hab.getCedulaHab());
			cs.setDate(5,java.sql.Date.valueOf(hab.getFechaNac()));
			cs.setString(6,hab.getSexoHab());
			cs.setInt(7,hab.getNivelInsHab());
			cs.setString(8,hab.getNacionalidadHab());
			cs.setString(9,hab.getEdoCivilHab());
			cs.setString(10,hab.getTelFijoHab());
			cs.setString(11,hab.getTelMovilHab());
			cs.setString(12,hab.getParentescoHab());
			cs.setString(13,hab.getProfOficioHab());
			cs.setString(14,hab.getDicapacidadHab());
			cs.setInt(15,hab.getIdNataMort());
			cs.setInt(16,hab.getExiste());
			cs.setInt(17,hab.getJefeFami());
			cs.setInt(18,hab.getIdFamilia());
			
			cs.execute();
			resultado = cs.getBoolean(1);
			
			if(	resultado){
	              con.commit();
	             
	           }
							}//fin del for
				con.setAutoCommit(true);
			}	
        }catch(Exception ex){
        	 ex.getMessage();
        	        }finally{
        	           try{
        	               if (cs != null)  cs.close();
        	               if (con != null) con.close();
        	           }catch(SQLException esql){
        	                esql.getMessage();
        	           }
        	        }
        	        return resultado;
	}
	
	public boolean validarHabitantexCed(String cedula){
		
		Conexion conexion = new Conexion();
		Connection con = null;
        CallableStatement cs = null;
        boolean resultado = false;
             
        try {
        	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (cedula != null){
				
			String query = "{? = call censo_comunal.validar_habitante(?)}";
			cs = con.prepareCall(query);
			cs.registerOutParameter(1, Types.BOOLEAN);
			cs.setString(2,cedula);
			cs.execute();
			resultado = cs.getBoolean(1);
			
			if(	resultado){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
        }catch(Exception ex){
        	 ex.getMessage();
        	        }finally{
        	           try{
        	               if (cs != null)  cs.close();
        	               if (con != null) con.close();
        	           }catch(SQLException esql){
        	                esql.getMessage();
        	           }
        	        }
        	        return resultado;
	}
	
public int obtenerIdJefe(String cedula){
		
		Conexion conexion = new Conexion();
		Connection con = null;
        CallableStatement cs = null;
        int resultado = 0;
             
        try {
        	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (cedula != null){
				
			String query = "{? = call censo_comunal.obtenerIdJefe(?)}";
			cs = con.prepareCall(query);
			cs.registerOutParameter(1, Types.INTEGER);
			cs.setString(2,cedula);
			cs.execute();
			resultado = cs.getInt(1);
			
			if(	resultado>0){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
        }catch(Exception ex){
        	 ex.getMessage();
        	        }finally{
        	           try{
        	               if (cs != null)  cs.close();
        	               if (con != null) con.close();
        	           }catch(SQLException esql){
        	                esql.getMessage();
        	           }
        	        }
        	        return resultado;
	}	
public int consultarCantHabxEdad (int edad){
	Conexion conexion = new Conexion();
	Connection con = null;
    CallableStatement cs = null;
	int cantidadHab = 0;
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (edad > 0){
				
			String query = "{? = call censo_comunal.consulta_habitante_edad(?)}";
			cs = con.prepareCall(query);
			cs.registerOutParameter(1, Types.INTEGER);
			cs.setInt(2,edad);
			cs.execute();
			cantidadHab = cs.getInt(1);
			
			if(	cantidadHab>-1){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (cs != null)  cs.close();
     	               if (con != null) con.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return cantidadHab;
	
}
public Habitante consultarHabxCedula (String idHab){
	Conexion conexion = new Conexion();
	Connection con = null;
	PreparedStatement  ps = null;
	ResultSet rs = null;
	Habitante hab = new Habitante();
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (idHab !=null){
				
			String query = "{call censo_comunal.consulta_habitante_hab_ced(?)}";
			ps = con.prepareCall(query);
			ps.setString(1,idHab);
			rs = ps.executeQuery();
			
			while (rs.next())
			{
			   hab.setNombreHab(rs.getString("hab_nombre"));
			   hab.setApellidoHab(rs.getString("hab_apellido"));
			   hab.setCedulaHab(rs.getString("hab_cedula"));
			   hab.setFechaNac(rs.getString("hab_fec_nac"));
			   hab.setSexoHab(rs.getString("hab_sexo"));
			   hab.setNivelInsHab(rs.getInt("hab_nivel_intr"));
			   hab.setNacionalidadHab(rs.getString("hab_nacionalidad"));
			   hab.setEdoCivilHab(rs.getString("hab_edo_civil"));
			   hab.setTelFijoHab(rs.getString("hab_tel_fijo"));
			   hab.setTelMovilHab(rs.getString("hab_tel_movil")); 
			   hab.setParentescoHab(rs.getString("hab_parentesco"));
			   hab.setParentescoHab(rs.getString("hab_prof_oficio"));
			   hab.setDicapacidadHab(rs.getString("hab_discapacida"));
			   hab.setIdFamilia(rs.getInt("fam_idfamilia"));
			   hab.setIdNataMort(rs.getInt("hab_nat_mor"));
			   hab.setExiste(rs.getInt("hab_existe"));
			   hab.setIdFamilia(rs.getInt("hab_jefe_fam"));
		   
			   
			}
	
			
			
			if(	hab!= null){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (ps != null)  ps.close();
     	               if (con != null) con.close();
     	              if (rs != null) rs.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return hab;
	
}

public Habitante consultarHabxId (Integer idHab){
	Conexion conexion = new Conexion();
	Connection con = null;
	PreparedStatement  ps = null;
	ResultSet rs = null;
	Habitante hab = new Habitante();
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (idHab !=null){
				
			String query = "{call censo_comunal.consulta_habitante_hab_id(?)}";
			ps = con.prepareCall(query);
			ps.setInt(1,idHab);
			rs = ps.executeQuery();
			
			while (rs.next())
			{
			   hab.setNombreHab(rs.getString("hab_nombre"));
			   hab.setApellidoHab(rs.getString("hab_apellido"));
			   hab.setCedulaHab(rs.getString("hab_cedula"));
			   hab.setFechaNac(rs.getString("hab_fec_nac"));
			   hab.setSexoHab(rs.getString("hab_sexo"));
			   hab.setNivelInsHab(rs.getInt("hab_nivel_intr"));
			   hab.setNacionalidadHab(rs.getString("hab_nacionalidad"));
			   hab.setEdoCivilHab(rs.getString("hab_edo_civil"));
			   hab.setTelFijoHab(rs.getString("hab_tel_fijo"));
			   hab.setTelMovilHab(rs.getString("hab_tel_movil")); 
			   hab.setParentescoHab(rs.getString("hab_parentesco"));
			   hab.setParentescoHab(rs.getString("hab_prof_oficio"));
			   hab.setDicapacidadHab(rs.getString("hab_discapacida"));
			   hab.setIdFamilia(rs.getInt("fam_idfamilia"));
			   hab.setIdNataMort(rs.getInt("hab_nat_mor"));
			   hab.setExiste(rs.getInt("hab_existe"));
			   hab.setIdFamilia(rs.getInt("hab_jefe_fam"));
		   
			   
			}
	
			
			
			if(	hab!= null){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (ps != null)  ps.close();
     	               if (con != null) con.close();
     	              if (rs != null) rs.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return hab;
	
}
//consulta de cantidad de personas con X enfermedad
public int consultarCantHabxEnfermedad (String  enfermedad){
	Conexion conexion = new Conexion();
	Connection con = null;
    CallableStatement cs = null;
	int cantidadHab = 0;
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			con.setAutoCommit(false);
			if (enfermedad != null){
				String query = "{? = call censo_comunal.consulta_habxenfermedad(?)}";
				cs = con.prepareCall(query);
				cs.registerOutParameter(1, Types.INTEGER);
				cs.setString(2,enfermedad);
				cs.execute();
				cantidadHab = cs.getInt(1);
			if(	cantidadHab>-1){
	            con.commit();
	            con.setAutoCommit(true);
	           }					
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (cs != null)  cs.close();
     	               if (con != null) con.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return cantidadHab;
	
}

public List<Habitante> consultarHabxEnfermedad (String idHab){
	Conexion conexion = new Conexion();
	Connection con = null;
	PreparedStatement  ps = null;
	ResultSet rs = null;
	List<Habitante> habitantes = new LinkedList<Habitante>();
	Habitante hab;
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (idHab !=null){
				
			String query = "{call censo_comunal.consulta_habxenfermedad(?)}";
			ps = con.prepareCall(query);
			ps.setString(1,idHab);
			rs = ps.executeQuery();
			
			while (rs.next())
			{
			hab= new Habitante();	
			   hab.setNombreHab(rs.getString("hab_nombre"));
			   hab.setApellidoHab(rs.getString("hab_apellido"));
			   hab.setCedulaHab(rs.getString("hab_cedula"));
			   hab.setFechaNac(rs.getString("hab_fec_nac"));
			   hab.setSexoHab(rs.getString("hab_sexo"));
			   hab.setEdoCivilHab(rs.getString("hab_edo_civil"));
			   hab.setTelFijoHab(rs.getString("hab_tel_fijo"));
			   hab.setTelMovilHab(rs.getString("hab_tel_movil"));
			   habitantes.add(hab);
    		}
		if(	!habitantes.isEmpty()){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (ps != null)  ps.close();
     	               if (con != null) con.close();
     	              if (rs != null) rs.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return habitantes;
	
}
public int consulta_canthabxnivel_inst(Integer nivel_inst){
	
	Conexion conexion = new Conexion();
	Connection con = null;
    CallableStatement cs = null;
    int resultado = 0;
         
    try {
    	conexion.estableceConexion();
		con=conexion.getConexion();
		
		con.setAutoCommit(false);
		if (nivel_inst >0){
			
		String query = "{? = call censo_comunal.consulta_canthabxnivel_inst(?)}";
		cs = con.prepareCall(query);
		cs.registerOutParameter(1, Types.INTEGER);
		cs.setInt(2,nivel_inst);
		cs.execute();
		resultado = cs.getInt(1);
		
		if(	resultado>0){
              con.commit();
             con.setAutoCommit(true);
           }
					
}	
			
    }catch(Exception ex){
    	 ex.getMessage();
    	        }finally{
    	           try{
    	               if (cs != null)  cs.close();
    	               if (con != null) con.close();
    	           }catch(SQLException esql){
    	                esql.getMessage();
    	           }
    	        }
    	        return resultado;
}

public List<Habitante> consulta_habxnivel_inst (int i){
	Conexion conexion = new Conexion();
	Connection con = null;
	PreparedStatement  ps = null;
	ResultSet rs = null;
	List<Habitante> habitantes = new LinkedList<Habitante>();
	Habitante hab;
	 try {
     	conexion.estableceConexion();
			con=conexion.getConexion();
			
			con.setAutoCommit(false);
			if (i >0){
				
			String query = "{call censo_comunal.consulta_habxnivel_inst(?)}";
			ps = con.prepareCall(query);
			ps.setInt(1,i);
			rs = ps.executeQuery();
			
			while (rs.next())
			{
			hab= new Habitante();	
			   hab.setNombreHab(rs.getString("hab_nombre"));
			   hab.setApellidoHab(rs.getString("hab_apellido"));
			   hab.setCedulaHab(rs.getString("hab_cedula"));
			   hab.setFechaNac(rs.getString("hab_fec_nac"));
			   hab.setSexoHab(rs.getString("hab_sexo"));
			   hab.setEdoCivilHab(rs.getString("hab_edo_civil"));
			   hab.setTelFijoHab(rs.getString("hab_tel_fijo"));
			   hab.setTelMovilHab(rs.getString("hab_tel_movil"));
			   habitantes.add(hab);
    		}
		if(	!habitantes.isEmpty()){
	              con.commit();
	             con.setAutoCommit(true);
	           }
						
	}	
				
     }catch(Exception ex){
     	 ex.getMessage();
     	        }finally{
     	           try{
     	               if (ps != null)  ps.close();
     	               if (con != null) con.close();
     	              if (rs != null) rs.close();
     	           }catch(SQLException esql){
     	                esql.getMessage();
     	           }
     	        }
     	       
	return habitantes;
	
}

}
